package com.bsoft.exchange.controller.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

import com.bsoft.exchange.response.ResponseEntity;
import com.bsoft.exchange.response.ResponseStatus;

import lombok.extern.slf4j.Slf4j;

/**
 * 全局异常处理类
 *ExceptionHandlerMethodResolver先在处理类内部找被@ExceptionHandler
 注解的方法，如果找不到，就会去被@ControllerAdvice注解的的类中的 @ExceptionHandler 注解方法
 */
@RestController
@ControllerAdvice(basePackages = "com.bsoft.exchange.controller,com.bsoft.exchange.webservice")
@Slf4j
public class GlobalExceptionHandler {
	
    /**
     *最后一层捕获异常处理的地方，防止异常无法展现出来
     * @param e
     * @return
     */
    @ExceptionHandler
    public ResponseEntity defaultExceptionHandler(Exception e){
    	//将错误记录在日志中。
		log.error(e.getMessage(), e);
        ResponseEntity entry = new ResponseEntity(ResponseStatus.ERROR_CODE,e.getMessage());
        return entry;
    }

    /**
     *用于测试1/0这种异常的
     * @param e
     * @return
     */
    @ExceptionHandler({ArithmeticException.class})
    public ResponseEntity ArithmeticExceptionHandler(ArithmeticException e){
    	//将错误记录在日志中。
		log.error(e.getMessage(), e);
        ResponseEntity entry = new ResponseEntity(ResponseStatus.ERROR_CODE,e.getMessage());
        return entry;
    }

}
